→日本のPostfix情報ページ
ここでは、従来の「sendmail」に代わる新しいMTA(Mail
Tranfer Agent)である
「Postfix」の説明と導入法を書いていきたいと思います。
「Postfix」は従来のUNIXの標準MTA「sendmail」と非常に高い互換性を持ちつつ、
動作も速く、安全で、そして「sendmail」で一番の問題点でもあった
「設定の難解さ」を解決したソフトとして一躍注目されるようになりました。
(「sendmail」では、設定ファイルを作るためのソフトもあったけど、それでもややこしかった…(涙))
今では、Linuxのディストリビューションの大半がこの「Postfix」を導入してます。
メールサーバーを運用しようと思っている方は、是非このPostfixでの運用を目指して欲しいと思います。
(qmailというMTAソフトもあるんですが…)
その前に、おそらく「rc.conf」にてsendmailが有効になっていると思います。
「sendmail_enable="YES"」を「sendmail_enable="NONE"」として一旦再起動してください。
(「sendmail_enable="NO"」では駄目です!)
プロセスをKILLしただけでは、エラーメッセージが出るかもしれません。
さくっとインストールです。ユーザー追加とかグループ追加とか、めんどくさい作業があります。
portsを使用すれば全部やってくれるので、ここはportsに頼りましょう。最新パッケージでもいいかも知れません。
Server# cd /usr/ports/mail/postfix
Server# make install |
なにやらメニューが表示されたと思います。
インストール時に色々な設定ができるのですが、ここはディフォルトのまま進みたいと思います。
ここは「ESC」キーで進んでください。
途中2回ほど聞かれると思いますが
(作業中)
Would you like me to add it [y]? yesを入力
(作業中)
Would you like to activate Postfix
in /etc/mail/mailer.conf
[n]? yesを入力 |
としてください。最後に「make clean」も忘れないように〜。
例によってportsでインストールした場合、
「/usr/local/etc/postfix」に設定ファイルはインストールされます。
見てみると、すんごい量のファイルがありますね(汗)。
たくさんありますが、今回実際に設定するのは「mail.cf」のみです。大半が設定のサンプルです。
このサンプルの日本語訳は、一番上で紹介したサイトに全て乗ってます。ありがたい事です。
とりあえず動作確認です!
Server# rehash
Server# postfix start |
これで起動したはずです。とりあえずインストールは終了!
調子に乗って、adminにメールを送ってみます。
Server# mail admin
Subject: test
test mail ;-)
.
EOT |
では確認……って、届いてません(汗)。「/var/log/message」を見てみると
(略)postfix/local[191]: fatal: open database
/etc/aliases.db:No such file or directory |
というメッセージが延々と出て叱られてます!
そういえばお約束を忘れてました。
を実行しましょう。「/etc/aliases.db」を作成するコマンドです。これで届いたはずです。
ちなみに
(略)postfix/master[9509]: fatal: bind INADDR_ANY port 25: Address already in use |
以上のようなメッセージが出たら、25番ポートが使われているよーという警告です。
DNSソフトのBINDとは全く関係ありませんので、
きちんと「rc.conf」にてsendmailをNONEで完全停止させてサーバーの再起動を行いましょう。
ここで、せっかくですので起動スクリプトを作成してみます。
実はインストール時に
cd /usr/local/etc/rc.d
ln -s /usr/local/sbin/postfix postfix.sh |
ってやっておけばいいって書いてくれていたりします。
深く考えないのであれば、実はこれで充分だったりします。
このままじゃつまらないですね。少し手を加えてみましょうか。
…スクリプトの自作はした事ないって? 作ってしまいましょう!…でも、ズルします…(汗)。
「/usr/local/etc/rc.d」に存在するスクリプトをちょちょいといじくって修正します。
おそらく存在するのではないか?と思われる「apache.sh」を土台にします。
準備です。
Server# cd /usr/local/etc/rc.d
Server# cp apache.sh postfix.sh
Server# chmod +xw postfix.sh |
エディタで開きます。
#!/bin/sh
case "$1" in
start)
[ -x /usr/local/sbin/apachectl ] &&
/usr/local/sbin/apachectl start > /dev/null
&& echo -n ' apache'
;;
stop)
[ -r /var/run/httpd.pid ] &&
/usr/local/sbin/apachectl stop > /dev/null
&& echo -n ' apache'
;;
*)
echo "Usage: `basename $0` {start|stop}"
>&2
;;
esac
exit 0 |
これをさくっと変更します。
#!/bin/sh
case "$1" in
start)
/usr/local/sbin/postfix start > /dev/null
2>&1 && echo -n ' postfix'
;;
stop)
/usr/local/sbin/postfix stop > /dev/null
2>&1 && echo -n ' postfix'
;;
*)
echo "Usage: `basename
$0` {start|stop}"
>&2
;;
esac
exit 0 |
こんな感じですね。画面に入りきらない都合上、一部が2行に分かれてますが、実際は1行です。
下線部だけ注意です。
ふつーに「/dev/null」に出力しても起動メッセージが出てしまうのでもう少し厳しく指定してます。
「x」属性のチェックとか、「pid」ファイルの確認とか関係ないので、ざっくり削除です。
これで起動スクリプトの完成です。難しい事はないと思います
インストール自体はこれで完了なのですが、このままではセキュリティはどこかに置いてけぼりです(汗)
必要な設定を行いたいと思います。
またまた雑談コーナーです。
セキュリティの設定を行うのに、知っておいた方が良い事を簡単に説明しておきます。
メールサーバー(MTA)には、
メールを配達する機能と、メールを受け取る機能の2つがあります。
メールを受け取る機能に関してはそんなに注意しなくてもいいのですが、
問題は「メールを配達する機能」にあります。
「スパムメールの踏み台にされた」「不正中継に使われた」なんて言葉を聞いた事がある方も多いと思いますが、
これは、自分のメールサーバーの配達機能を第三者に不正に使われたという事です。
これだけは起こさないようにしないといけません。
よく「メールの配送方式はバケツリレーである」と言われます。
MTAである「sendmail」や「Postfix」はメールの配送を行うわけなのですが、
ユーザーがメールを送信した時、いきなり相手のメールサーバーに届いているのではなく、
一旦、郵便配達人とも言える自分のメールサーバーにメールの配達を依頼しています。
そしてこの郵便配達人が、相手のメールサーバーにメールを投函してくれています。
ここで問題がおきます。
この郵便配達人は、誰からのメールであっても、受け取ると相手のメールサーバーに投函しにいきます。
どこの誰とも知れない相手から1000通のメールを受け取っても、
それを疑問に思わずに指定されたメールアドレスのサーバーに律儀に送り届けるわけです。
これを許可しておくと、こういった不正使用をしようと企んでいる人間に見つかった時大変な事になります。
そこで、配達していいメールは自分が出したものだけであると、
あらかじめ郵便配達人であるメールサーバーに制限をかけておくわけです。
この「制限」が、今回行おうとしているセキュリティの設定内容になります。
具体的には「ローカルIPアドレス側から配送を依頼されたメールだけ配達する」といった感じに設定します。
さらに「メールの差出人が自分のドメイン名の時だけ配送を行う」と言った設定も可能ですが、
メールの差出人なんて簡単に偽造できるので、これは制限しても意味がないかもしれません。
メールを受け取る際にも、「このメールサーバーから送られてきたメールは受け取らない」とか設定できますが、
まず「ローカルIPアドレス側から配送を依頼されたメールのみ配達を許可する」をメインに置き、
第三者に不正に利用されないための設定を行います。
ということで、外部向けメールサーバーとして動作するための必要最小限の設定と
セキュリティ(配送制限)の設定を行いたいと思います。
しかし、注意して欲しいのは、外部からのメールを受け取るメールサーバーを動作させるということは、
それは「独自ドメイン名」を持っていなければならないということになります。
そうでないと、「admin@独自ドメイン」宛にメールが届いても、どこに届けたらいいか分からないからです。
まだ持っていないのであれば、メールサーバーを設置する意味はほとんどありません。
DNS(DynamicDNS)の登録をまず終えましょう。(もちろんグローバルIPが必要です)
DNSサーバーを内部で建てた方でも、おそらく「外部独自ドメイン」のゾーンファイルは
DynamicDNSサーバー側で管理しているはずです。そちらへの設定を忘れないで下さい。
なお、今後、ここでは
・ドメイン名は「example.me」
・メールサーバー(ホスト)名は「mail.example.me」
・ローカルネットワークは「192.168.1.????
/ 255.255.255.0」
とします。決してあり得ない名前を付けてます。
実際に設定する場合、自分にあった様に変えてください
「mydomain」「myhostname」とか書かれてもややこしいだけですからね…(−−;)
「main.cf」を開きます。以下の設定項目を探して、書き換えます。
#自分のホスト名(ドメイン名まで正しく書く)
myhostname = mail.example.me
#所属するドメイン名
mydomain = example.me
#メール送信時に使用する差出人のドメイン名
myorigin = $mydomain
#メール受信を許可するインターフェイス
inet_interfaces = all
#受信時に受け取るメールアドレスのドメイン名
mydestination = $myhostname, localhost.$mydomain,
$mydomain
#リレーを許可するホストのIPアドレス
mynetworks = 192.168.1.0/24,
127.0.0.1 |
以上です。他に関してはディフォルトのままでいいと思います。
これが基本的な設定項目です。
では順に詳しい説明をしておきます。
「myhostname」:
これはずばり、メールサーバーのホスト名です。
自分のサーバーで設定しているので、自分のホスト名になるはずです。
きちんとDNS(DynamicDNS)の「Aレコード」でIPアドレスが指定されている名前じゃなければ駄目です。
(CNAMEは駄目)
Aレコードが「ns.example.me」だけしか登録してない場合は
ゾーンファイルに「mail IN A xxx.xxx.xxx.xxx」という風にちゃんと設定しておきましょう。
「mydomain」:
自分のサーバーが所属するドメイン名です。
しかしDynamicDNSの場合は少し状況が変わって来ます。
(下で詳しい説明をします)
「myorigin」:
ローカルからメールを送信した時、送信者メールアドレスにドメイン名が書かれて無い時に付けるドメイン名です。
ここでは変数を使用して、「mydomain」と同じ名前を付けています。
つまり「$mydomain = example.me」です
多分、クライアントPCからメールを送信する場合、関係ない項目でしょう…。
コンソールからadminユーザーで「mail ???@どこか.com」とメールを打つと、
自動的に差出人メールアドレスのドメインをmyorigin…つまり「admin@example.me」にしてくれます…多分。
「inet_interface」:
メール受信を許可するインターフェイスです。
この設定は、どこから送られてきたメールでも受け取ります。
「mydestination」:
インターネットからメールが届いたという事は、自分のドメイン宛にメールが届いたという事になります。
次に、ちゃんとここでドメイン名をチェックして、
メールアドレスの「@」以下に、ここで指定された名前がなければ受け取らないように設定します。
この設定の場合「ユーザー@example.me(mydomain)」でも、
「ユーザー@mail.example.me(myhostname)」でも受け取ります。
しかし「ユーザー@www.example.com」とか言ったメールは受け取らないわけです。
受け取りたいのであれば、それも追加しておきます。
localhostは…お約束みたいなものです、多分(汗)。
ここでの指定はDNSで「CNAME」として設定されている名前でも使用可能です。
「mynetworks」:
もっとも重要な項目です。
ここで配送制限(通称リレー制限)をかけます。
この設定をしていないと、上の説明どおり、第3者に不正利用される可能性が高くなります。
この設定がたった一行で出来るんだから、Postfixはありがたいです。ホント。
・DynamicDNSを使用した場合:
すこし設定が変わります。
なぜなら、「独自ドメイン名」がそのままホスト名とドメイン名になる事が多いからです。
・独自ドメイン名は「you.dynamic.me」
・メールサーバー(ホスト)名は「you.dynamic.me」
「main.cf」
myhostname = you.dynamic.me
mydomain = $myhostname
myorigin = $mydomain
inet_interfaces = all
mydestination = $mydomain, localhost.$mydomain
mynetworks = 192.168.1.0/24,
127.0.0.1(自分の環境に合わせてください) |
こうするしかないと思います、はい。(自信ない…(汗))
ただし、DynamicDNS側で「you@dynamic.me」というメアドを提供、サーバに転送してくれているのであれば、
myhostname = you.dynamic.me
mydomain = $myhostname
myorigin = $mydomain
inet_interfaces = all
mydestination = $mydomain, localhost.$mydomain,
dynamic.me
mynetworks = 192.168.1.0/24, 127.0.0.1(自分の環境に合わせてください) |
で良いのかもしれませぬ。そんなサービスってあったっけ…保障はできなけど……(ぉ
これで設定は完了です。
として、新しい設定を読み込ませましょう。
実は、とてもとても大切な事をまだ説明してなかったりします。
このままではインターネット側からのメールが届きません。
配送だけならこれで動作するのですが、
外部メールサーバーから自分のドメイン宛のメールが届いた時、
相手のMTAは宛先ドメインのDNSに登録されている「MXレコード」というのを見て、
実際に、どのサーバー(ホスト)にメールを送ればいいのか判断して配送します。
この「MX」とは「Mail eXchanger」の事です。
実際のゾーンファイルにMXレコードを追加するのであれば、
メールサーバーは「Aレコード」で指定されているホスト名を使用してください。
「CNAME」で別名を付けているホスト名だと、配送されないはずです。
メールサーバが「ns.example.me」で、
「IN NS ns.example.me.」「IN A XXX.XXX.XXX.XXX」がすでに設定されている場合:
NSレコード、Aレコード共に「ns.example.me」で登録されているが、
メールサーバー「mail.example.me」が登録されていない場合:
mail IN A XXX.XXX.XXX.XXX
IN MX 10 mail.example.me. |
となります。
ただし自分のサーバーにDynamicDNSを使用しているのであれば、
DynamicDNSサーバーの方にてMXレコードの設定をします。
(DynamicDNSによる独自ドメインの場合、ゾーン情報はDynamicDNS側で管理してる場合がほとんどだからです)
ここまで完成して、実際にインターネット上でメールサーバーが動作するようになったら、
最後に本当に不正メールが拒否されているかどうかの確認を取ります。
様々な方法がありますが、一番一般的な方法を。
Server# telnet relay-test.mail-abuse.org
(色々とチェックされる)
System appeared to reject relay
attempts
(意訳:リレーは拒否されたと判断しました) |
このメッセージが出れば、大丈夫です。
他にもWebブラウザ上から行いたいのであれば有限会社長崎ネットワークサービスさんがオススメです。
この確認を終えたら、クライアントのメールソフトに登録してください。
ユーザー追加や、Aliasesを編集する事により、好きなだけメールアドレスが持てます!
しかし、その前にPOPサーバーの設定を終えておくのもいいかも知れませんね。
[一つ上に戻る] |